package Integration;

import java.util.ArrayList;
import java.util.List;

import BusinessService.AccountControl;
import BusinessService.ServicesGeral;
import Domain.Account;
import Domain.Catalog;
import Domain.CreditCardDetail;
import Domain.Order;
import Domain.OrderDetail;
import Domain.Product;
import Domain.ShoppingCart;
import Domain.ShoppingCartItem;
import Exception.DadosException;

public class IntegrationImpl implements Integration{

	AccountControl controlAccount;
	ServicesGeral control;
	
	private static IntegrationImpl integration;
	
	public IntegrationImpl() {
		controlAccount = new AccountControl();
		control = new ServicesGeral();
	}
	
	public static synchronized IntegrationImpl getIntegration(){
		if(integration == null){
			integration = new IntegrationImpl();
		}
		return integration;	
	}
	
	@Override
	public void insertAccount(Account account, String senha2) throws DadosException {
		
		controlAccount.insert(account, senha2);
		
	}
	
	public Account efetuarLogin(String username, String password) throws DadosException{
		
		return controlAccount.logar(username, password);
	}

	@Override
	public void salvarCatalogo(Catalog catalog) throws DadosException {
		// TODO Auto-generated method stub
		control.salvarCatalog(catalog);
	}

	@Override
	public List<Catalog> listaCatalogos() {
		
		return control.listaCatalogos();
		
	}
	
	public void salvarProduto(Product produto)throws DadosException{
		
		control.salvarProduto(produto);
		
	}

	public Catalog pesquisarCatalogoPorID(int id){
		return control.pesquisarCatalogoID(id);
	}

	@Override
	public List<Product> pesquisarProdutosPorCatalogoID(int id_catalogo) {
		
		return control.listarProdutosPorCatalogo(id_catalogo);
	}

	@Override
	public ShoppingCart obterCarrinhoPorUsuario(Account ac) {
		
		return control.obterShoppingCart(ac);
		
	}
	
	@Override
	public void criarCarrinhoDeCompras(ShoppingCart shopping) throws DadosException{
		
		control.criarCarrinhoDeCompras(shopping);
	}
	
	public void addItemNoCarrinho(ShoppingCartItem item) throws DadosException{
		
		control.addItemNoCarrinho(item);
	}

	@Override
	public List<OrderDetail> listarItensOrder(Order detalhe) {
		return control.listarItensOrdem(detalhe);
	}
	
	@Override
	public List<ShoppingCartItem> listarItensCarrinho(ShoppingCart carrinho) {
		return control.listarItensCarrinho(carrinho);
	}
	
	
	@Override
	public void excluirItemDoCarrinho(ShoppingCartItem itemExcluir)throws DadosException{
		
		control.excluirItemDoCarrinho(itemExcluir);
	}

	@Override
	public void salvarCartao(CreditCardDetail cartao) throws DadosException {
		control.salvarCartao(cartao);
		
	}

	@Override
	public Order gerarOrdem(ShoppingCart gerarOrdem) throws DadosException {

		return control.gerarOrdem(gerarOrdem);
	}
	
	public List<OrderDetail> listarOrderDetail(Order Order){
		return control.listarOrderDetail(Order);
	}
	
	public void alterarOrder(Order order) throws DadosException{
		control.alterarOrder(order);
	}
	
	public void alterarQuantidade(ShoppingCartItem item) throws DadosException{
		control.alterarQuantidade(item);
	}

	@Override
	public void calcularSubTotal(ShoppingCart carrinho) {
		control.calcularSubTotal(carrinho);
		
	}
	
	public List<Order> listarOrderDetail(Account account){
		
		return control.listarOrderDetail(account);
	}
}
